#include <iostream>
#include <algorithm>
#include <cstring>
#include <unordered_map>
using namespace std;

const int N = 100010, mod = 99999997;
// 首先需要知道的是为什么答案和逆序对有关系
// 先加上限制条件，假设a有序，b无序，并且只能移动a
// 由于每次交换可以让逆序对-1，所以只需要k步就能将b有序
// 接下来放开只能交换b的限制，会发现想要让a和b相同，a也要移动>=k步，所以最优解仍然是b的逆序对数量
// 接下来放开a有序的特点，a无序
// 由于通过离散化让a和b中的元素代表的都只是排位
// 可以先将a中的元素映射成有序，然后将b中的元素根据a中的元素排位进行映射
// 这样就得到了一个a有序，b无序的简化版本，然后再求b序列的逆序对


int n;
int a[N], b[N], arr[N], tmp[N];

void print(int tmp[])
{
    for(int i = 0; i < n; ++i)
        cout << tmp[i] << ' ';
    cout << endl;
}

void discretizate(int tmp[])
{
    int p[N];
    for(int i = 0; i < n; ++i)
        p[i] = i;
    sort(p, p + n, [&](int x, int y){
       return tmp[x] < tmp[y]; 
    });
    for(int i = 0; i < n; ++i)
        tmp[p[i]] = i;
    // print(p);
    // print(tmp);
}

void all_reserve(int left, int right, long long& ans)
{
    if (left >= right)
        return;
    int mid = (left + right) >> 1;
    all_reserve(left, mid, ans);
    all_reserve(mid + 1, right, ans);
    int end1 = left, end2 = mid + 1;
    int k = left;
    //合并的过程中顺便找到逆序对的数量
    while (end1 <= mid && end2 <= right)
    {
        //发现逆序对
        if (arr[end1] > arr[end2])
        {
            //加入当前逆序对的数量
            //逆序对的数量就要加上左边所有比他大的数的数量
            ans = (ans + mid + 1 - end1) % mod;
            //虽然发现逆序对，但是要把小的插到前面去
            tmp[k++] = arr[end2++];
        }
        else
            tmp[k++] = arr[end1++];
    }
    while (end1 <= mid)
    {
        tmp[k++] = arr[end1++];

    }
    while (end2 <= right)
        tmp[k++] = arr[end2++];
    //合并
    for (int i = left; i <= right; ++i)
        arr[i] = tmp[i];

}

int main()
{
    cin >> n;
    for(int i = 0; i < n; ++i)
        cin >> a[i];
    for(int i = 0; i < n; ++i)
        cin >> b[i];
    discretizate(a);
    discretizate(b);
    unordered_map<int, int> a_to_c;
    for(int i = 0; i < n; ++i)
        a_to_c[a[i]] = i; // 通过哈希能够快速找到a中排名所对应的下标
    for(int i = 0; i < n; ++i)
        arr[i] = a_to_c[b[i]];
    // print(c);
    // 求c中的逆序对数
    long long ans = 0;
    all_reserve(0, n - 1, ans);
    cout << ans << endl;
    return 0;
}
